home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / nihcl-30.lha / nihcl-3.0 / ex / AutoDeriv.h < prev    next >
C/C++ Source or Header  |  1990-05-15  |  2KB  |  78 lines

  1. #ifndef AutoDerivH
  2. #define AutoDerivH
  3.  
  4. // AutoDeriv.h -- one-dimensional automatic derivative
  5.  
  6. // $Header: /afs/alw.nih.gov/unix/sun4_40c/usr/local/src/nihcl-3.0/share/ex/RCS/AutoDeriv.h,v 3.0 90/05/15 22:43:25 kgorlen Rel $
  7.  
  8. #include <math.h>
  9.  
  10. class ostream;
  11.  
  12. class AutoDeriv {
  13. private:
  14.     double u,du;
  15. public:
  16.     AutoDeriv(double v = 0.0,double dv = 0.0) { u=v; du=dv; }
  17.  
  18.     friend double F(const AutoDeriv& x) { return x.u; }
  19.     friend double dF(const AutoDeriv& x) { return x.du; }
  20.  
  21.     void operator=(const AutoDeriv& x);
  22.     int operator==(const AutoDeriv& x) const;
  23.  
  24.     AutoDeriv operator-() const;
  25.     AutoDeriv pow(int e) const;
  26.  
  27.     friend AutoDeriv operator+(const AutoDeriv&,
  28.                                const AutoDeriv&);
  29.     friend AutoDeriv operator-(const AutoDeriv&,
  30.                                const AutoDeriv&);
  31.     friend AutoDeriv operator*(const AutoDeriv&,
  32.                                const AutoDeriv&);
  33.     friend AutoDeriv operator/(const AutoDeriv&,
  34.                                const AutoDeriv&);
  35.     void printOn(ostream& strm) const;
  36. };
  37. inline AutoDeriv operator+(const AutoDeriv& x,
  38.                            const AutoDeriv& y)
  39.     return AutoDeriv(F(x)+F(y),dF(x)+dF(y)); 
  40. }
  41. inline AutoDeriv operator-(const AutoDeriv& x,
  42.                            const AutoDeriv& y)
  43.     return AutoDeriv(F(x)-F(y),dF(x)-dF(y)); 
  44. }
  45. inline AutoDeriv operator*(const AutoDeriv& x,
  46.                            const AutoDeriv& y)
  47. {
  48.     return AutoDeriv(F(x)*F(y),
  49.                      F(y)*dF(x)+F(x)*dF(y));
  50. }
  51. inline AutoDeriv operator/(const AutoDeriv& x,
  52.                            const AutoDeriv& y)
  53.     return AutoDeriv(F(x)/F(y),
  54.                      (F(y)*dF(x)-F(x)*dF(y))/F(y)*F(y)); 
  55. }
  56. inline AutoDeriv Exp(const AutoDeriv& x) 
  57.     return AutoDeriv(exp(F(x)),dF(x)*exp(F(x))); 
  58. }
  59. inline AutoDeriv Log(const AutoDeriv& x) 
  60.     return AutoDeriv(log(F(x)),dF(x)/F(x)); 
  61. }
  62. inline AutoDeriv Sin(const AutoDeriv& x) 
  63.     return AutoDeriv(sin(F(x)),dF(x)*cos(F(x))); 
  64. }
  65. inline AutoDeriv Cos(const AutoDeriv& x) 
  66.     return AutoDeriv(cos(F(x)),-dF(x)*sin(F(x))); 
  67. }
  68. extern ostream& operator<<(ostream& strm, 
  69.                            const AutoDeriv& x);
  70. #endif/* AutoDerivH */
  71.